#ifndef TRACKER_H
#define TRACKER_H


#include <QtOpenGL>

#include <sequence.h>

#include <typesBackground.h>

#include <mymath.h>

#include <featureSet.h>




///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////




class Tracker
{
public:
    Tracker();

    Tracker(
                //CAMERASET
                  QString INPUT_FINAL_PATH_Cameras_IN,

                //MODEL
                  QString INPUT_dynamicStringPart_IN,
                  QVector<QString> INPUT_ModelNamesQVect_IN,
                  QString INPUT_EXTENSSS_Mesh_IN,
                  QString INPUT_EXTENSSS_Skeleton_IN,
                  QString INPUT_EXTENSSS_Skin_IN,
                  QString INPUT_EXTENSSS_Limits_IN,
                  QString INPUT_EXTENSSS_VOI_IN,

                //ANIMATION
                  QString RadioSequenceID_String_IN,
                  QString INPUT_EXTENSSS_Motion_IN,
                  QString INPUT_FINAL_PATH_IndexCheat_IN,

                //VIDEO_SEQUENCE
                  QString INPUT_FINAL_PATH_Video_IN,
                  QString INPUT_FINAL_PATH_IndexCheat_INN,

                //SEQUENCE
                  QString INPUT_FINAL_PATH_IndexCheat_INNN,
                  QString RadioSequenceID_String_INN,

                //FINGERTIPS
                  QString INPUT_FINAL_PATH_Video_INN,
                  QString INPUT_FINAL_PATH_IndexCheat_INNNN
           );

    Sequence sequence;

    /////////////////////////
    FeatureSet FEAT_Skinnnnn;
    /////////////////////////

    QString outputFOLDER;

    TypesBackground typesBackground;

    double  THRESH_detector_Confidence;

    //////////////////////////////////////////////////////////////////////////////////////////////////////////////
    //////////////////////////////////////////////////////////////////////////////////////////////////////////////

    void transform_All_Model_MESHES();
    void transform_All_Model_SKELETONS();
    void calculate_All_Model_ROTATION_AXES();

    void incrFrameNumber();
    int  currentFrameNumberGET();
    void currentFrameNumberSET( int inValue, bool shouldTransform, bool shouldTryLoadFrameRGB );

    int starting_FrameTracker_INI;

    void SET_StartingFrame_INI( int inValueSTART );

    //////////////////////////////////////////////////////////////////////////////////////////////////////////////
    //////////////////////////////////////////////////////////////////////////////////////////////////////////////
    void CLEAR_Tracker();

    void calculate_Bones_using_RT( int frameNumber, int currrAdd );

    void BackProject_Depth_2_PCL();

private:

signals:

    void visualizeCorrespNumbers_SIGNAL( QVector<int> corresp_ForEach_SkinBone );

};

#endif // TRACKER_H
